Перем юТест;

Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
	
	юТест = ЮнитТестирование;
	
	ВсеТесты = Новый Массив;
	
	ВсеТесты.Добавить("ТестДолжен_ПроверитьКвалификаторыЧисла");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьКвалификаторыСтроки");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьКвалификаторыДаты");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьКвалификаторыДвоичныхДанных");

	ВсеТесты.Добавить("ТестДолжен_СоздатьОписаниеТиповПоКвалификаторам");
	ВсеТесты.Добавить("ТестДолжен_СоздатьОписаниеТиповПоДругомуОписанию");

	ВсеТесты.Добавить("ТестДолжен_ПроверитьПриведениеСтрок");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПриведениеБулева");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПриведениеДат");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПриведениеБезПриведения");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьПриведениеЧисел");
	
	Возврат ВсеТесты;

КонецФункции

Процедура ТестДолжен_ПроверитьКвалификаторыЧисла() Экспорт
	
	К1 = Новый КвалификаторыЧисла(10);
	К2 = Новый КвалификаторыЧисла(10, 0);
	К3 = Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Любой);
	К4 = Новый КвалификаторыЧисла(10, 1);

	юТест.ПроверитьРавенство  (К1, К2, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьРавенство  (К1, К3, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьРавенство  (К2, К3, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьНеРавенство(К1, К4, "Квалификаторы с разными параметрами не равны");

	юТест.ПроверитьРавенство(К1.ДопустимыйЗнак, ДопустимыйЗнак.Любой);
	юТест.ПроверитьРавенство(К1.РазрядностьДробнойЧасти, 0);

КонецПроцедуры

Процедура ТестДолжен_ПроверитьКвалификаторыСтроки() Экспорт
	
	К1 = Новый КвалификаторыСтроки(10);
	К2 = Новый КвалификаторыСтроки(10, ДопустимаяДлина.Переменная);
	К3 = Новый КвалификаторыСтроки(10, ДопустимаяДлина.Фиксированная);

	юТест.ПроверитьРавенство  (К1, К2, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьНеРавенство(К1, К3, "Квалификаторы с разными параметрами не равны");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьКвалификаторыДаты() Экспорт

	К1 = Новый КвалификаторыДаты();
	К2 = Новый КвалификаторыДаты(ЧастиДаты.Дата);
	К3 = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
	К4 = Новый КвалификаторыДаты(ЧастиДаты.Время);

	юТест.ПроверитьРавенство  (К1, К2, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьНеРавенство(К1, К3, "Квалификаторы с разными параметрами не равны");
	юТест.ПроверитьНеРавенство(К1, К4, "Квалификаторы с разными параметрами не равны");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьКвалификаторыДвоичныхДанных() Экспорт
	
	К1 = Новый КвалификаторыДвоичныхДанных(10);
	К2 = Новый КвалификаторыДвоичныхДанных(10, ДопустимаяДлина.Переменная);
	К3 = Новый КвалификаторыДвоичныхДанных(10, ДопустимаяДлина.Фиксированная);

	юТест.ПроверитьРавенство  (К1, К2, "Квалификаторы с одинаковыми параметрами равны");
	юТест.ПроверитьНеРавенство(К1, К3, "Квалификаторы с разными параметрами не равны");

КонецПроцедуры

Процедура ТестДолжен_СоздатьОписаниеТиповПоКвалификаторам() Экспорт

	Описание1 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10));
	Описание2 = Новый ОписаниеТипов("Строка", Новый КвалификаторыЧисла(10));
	Описание3 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10));
	Описание4 = Новый ОписаниеТипов("Число,Строка", Новый КвалификаторыЧисла(20));

	юТест.ПроверитьРавенство(Описание1.КвалификаторыЧисла, Описание2.КвалификаторыЧисла);

	// Значения по умолчанию должны совпасть
	юТест.ПроверитьРавенство(Описание1.КвалификаторыСтроки, Описание2.КвалификаторыСтроки);
	юТест.ПроверитьРавенство(Описание1.КвалификаторыДаты, Описание2.КвалификаторыДаты);
	юТест.ПроверитьРавенство(Описание1.КвалификаторыДвоичныхДанных, Описание2.КвалификаторыДвоичныхДанных);

	юТест.ПроверитьРавенство(Описание1.Типы().Количество(), 1);
	юТест.ПроверитьРавенство(Описание2.Типы().Количество(), 1);
	юТест.ПроверитьРавенство(Описание3.Типы().Количество(), 1);
	юТест.ПроверитьРавенство(Описание4.Типы().Количество(), 2);

КонецПроцедуры

Процедура ТестДолжен_СоздатьОписаниеТиповПоДругомуОписанию() Экспорт

	КЧ1 = Новый КвалификаторыЧисла(10);
	КЧ2 = Новый КвалификаторыЧисла(20);
	КС1 = Новый КвалификаторыСтроки(10);
	КС2 = Новый КвалификаторыСтроки(20);
	КД1 = Новый КвалификаторыДаты(ЧастиДаты.Дата);
	КД2 = Новый КвалификаторыДаты(ЧастиДаты.Время);
	КДД1 = Новый КвалификаторыДвоичныхДанных(10);
	КДД2 = Новый КвалификаторыДвоичныхДанных(20);

	Описание1 = Новый ОписаниеТипов("Строка,Число", КЧ1, КС1, КД1, КДД1);
	Описание2 = Новый ОписаниеТипов(Описание1, "Массив", "Число", КЧ2, КС2, КД2, КДД2);

	юТест.ПроверитьНеРавенство(Описание1.КвалификаторыЧисла, Описание2.КвалификаторыЧисла);
	юТест.ПроверитьНеРавенство(Описание1.КвалификаторыСтроки, Описание2.КвалификаторыСтроки);
	юТест.ПроверитьНеРавенство(Описание1.КвалификаторыДаты, Описание2.КвалификаторыДаты);
	юТест.ПроверитьНеРавенство(Описание1.КвалификаторыДвоичныхДанных, Описание2.КвалификаторыДвоичныхДанных);

	юТест.ПроверитьРавенство(Описание2.Типы().Найти(Тип("Число")), Неопределено);
	юТест.ПроверитьНеРавенство(Описание2.Типы().Найти(Тип("Массив")), Неопределено);

	юТест.ПроверитьРавенство(Описание2.СодержитТип(Тип("Число")), Ложь);
	юТест.ПроверитьРавенство(Описание2.СодержитТип(Тип("Массив")), Истина);

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПриведениеСтрок() Экспорт

	Описание1 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(5, ДопустимаяДлина.Фиксированная));
	
	Значение = Описание1.ПривестиЗначение("123456");
	юТест.ПроверитьРавенство(Значение, "12345", "Усечение строки");

	Значение = Описание1.ПривестиЗначение("123");
	юТест.ПроверитьРавенство(Значение, "123  ", "Расширение строки");

	Значение = Описание1.ПривестиЗначение(Новый Массив);
	юТест.ПроверитьРавенство(Значение, "Масси", "Неродное значение");

	Значение = Описание1.ПривестиЗначение(1);
	юТест.ПроверитьРавенство(Значение, "1    ", "Приведение числа");

	Значение = Описание1.ПривестиЗначение(123456);
	юТест.ПроверитьРавенство(Значение, "12345", "Приведение числа с усечением");


	Описание1 = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(5, ДопустимаяДлина.Переменная));
	
	Значение = Описание1.ПривестиЗначение("123456");
	юТест.ПроверитьРавенство(Значение, "12345", "Усечение строки");

	Значение = Описание1.ПривестиЗначение("123");
	юТест.ПроверитьРавенство(Значение, "123", "Расширения строки нет");

	Значение = Описание1.ПривестиЗначение(Новый Массив);
	юТест.ПроверитьРавенство(Значение, "Масси", "Неродное значение");

	Значение = Описание1.ПривестиЗначение(1);
	юТест.ПроверитьРавенство(Значение, "1", "Приведение числа без расширения строки");

	Значение = Описание1.ПривестиЗначение(123456);
	юТест.ПроверитьРавенство(Значение, "12345", "Приведение числа с усечением");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПриведениеБулева() Экспорт

	Описание1 = Новый ОписаниеТипов("Булево");

	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение(), Ложь, "Значение по-умолчанию");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение(Новый Массив), Ложь, "Неприводимое значение");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение(0), Ложь, "Число 0 = Ложь");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение(1), Истина, "Число 1 = Истина");

	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение(132432), Истина, "Любое число не 0 = Истина");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение("Истина"), Истина, "Стрковое представление Истина");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение("Ложь"), Ложь, "Стрковое представление Ложь");

	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение("false"), Ложь, "Стрковое представление false");
	юТест.ПроверитьРавенство(Описание1.ПривестиЗначение("true"), true, "Стрковое представление true");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПриведениеДат() Экспорт

	Описание_ДатаВремя = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
	Описание_Дата      = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата));
	Описание_Время     = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Время));

	ИсходноеЗначение = "20170106010114";
	Верное_ДатаВремя = '20170106010114';
	Верное_Дата      = '20170106000000';
	Верное_Время     = '00010101010114';

	Значение_ДатаВремя = Описание_ДатаВремя.ПривестиЗначение(ИсходноеЗначение);
	Значение_Дата      = Описание_Дата.ПривестиЗначение(ИсходноеЗначение);
	Значение_Время     = Описание_Время.ПривестиЗначение(ИсходноеЗначение);

	юТест.ПроверитьРавенство(Значение_ДатаВремя, Верное_ДатаВремя, "Приведение без усечения");
	юТест.ПроверитьРавенство(Значение_Дата, Верное_Дата, "Усечение времени");
	юТест.ПроверитьРавенство(Значение_Время, Верное_Время, "Усечение даты");

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПриведениеБезПриведения() Экспорт

	Описание = Новый ОписаниеТипов(Новый Массив);

	Значения = Новый Массив;
	Значения.Добавить('20170111121212');
	Значения.Добавить("Строка 5");
	Значения.Добавить(14);

	Для Каждого ПроверяемоеЗначение Из Значения Цикл
		юТест.ПроверитьРавенство(Описание.ПривестиЗначение(ПроверяемоеЗначение), ПроверяемоеЗначение);
	КонецЦикла;

КонецПроцедуры

Процедура ТестДолжен_ПроверитьПриведениеЧисел() Экспорт

	Описание = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(-5), 0, "Обнуление отрицательных");

	Описание = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой));
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(5.555), 5.56, "Округление");
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(5.554), 5.55, "Округление");
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(-5.554), -5.55, "Округление");
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(-5.555), -5.56, "Округление");
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(-5.55), -5.55, "Округление");

	Описание = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(0, 0, ДопустимыйЗнак.Любой));
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(12345.555), 12345.555, "Не режет ничего");

	Описание = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(5, 2, ДопустимыйЗнак.Любой));
	юТест.ПроверитьРавенство(Описание.ПривестиЗначение(12345.555), 999.99, "Забивает девятками");

КонецПроцедуры
